from typing import Optional
from sqlalchemy import Boolean, Column, Integer, String
from app.db.base import Base

class User(Base):
    """用户数据模型
    
    定义用户在数据库中的表结构，继承自SQLAlchemy的Base类
    包含用户的基本信息、认证信息和权限信息
    """
    __tablename__ = "users"  # 表名，默认为类名小写的复数形式
    id = Column(Integer, primary_key=True, index=True)  # 用户ID，主键
    email = Column(String(255), unique=True, index=True, nullable=False)  # 用户邮箱，唯一
    username = Column(String(100), unique=True, index=True, nullable=False)  # 用户名，唯一
    hashed_password = Column(String(255), nullable=False)  # 哈希后的密码
    full_name = Column(String(100), index=True)  # 用户全名
    is_active = Column(Boolean, default=True)  # 用户是否激活
    is_superuser = Column(Boolean, default=False)  # 是否为超级管理员

    def __repr__(self) -> str:
        """对象的字符串表示
        
        Returns:
            str: 用户对象的字符串表示
        """
        return f"<User {self.username}>"